class Solution {
public:
    int minOperations(vector<int>& nums, int x) {
        //这道题的思路是，把找两边改成找中间正好等于sum-x
        long long left=0;long long right=0;
        long long ret=0;
        long long sum=0;long long s=0;
        for(int e:nums)
        {
            s+=e;
        }
        long long t=s-x;
        //特判一下如果t小于0说明这个东西压根就取不到
        if(t<0) return -1;
        if(t==0)
        {
            return nums.size();//小优化
        }
        while(right<nums.size())
        {
            //进窗口
            sum+=nums[right];
            //判断状态
            while(sum>=t)
            {
                if(sum==t)
                {
                    ret=max(ret,right-left+1);
                }
                //出窗口
                sum-=nums[left];
                left++;
            }
            right++;
        }
        int p=nums.size()-ret;
        if(p==nums.size()||p==0) return -1;
        return p;
    }
};